﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Clientes;
using Model.Contratos;

namespace welwitschia.Clientes
{
    public partial class ClienteDetalhe : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            txtIdCliente.Enabled = false;

            if (!Page.IsPostBack)
            {
                if (String.IsNullOrEmpty(Request.QueryString["cid"]))
                {
                    LimpaDadosForm();
                    btnCriarContrato.Enabled = false;
                    btnCriarUnidade.Enabled = false;
                }
                else
                {
                    IClienteService clientesService = new ClienteService();
                    Cliente cliente = clientesService.ObterPorIdCliente(Convert.ToInt64(Request.QueryString["cid"]));
                    txtIdCliente.Text = cliente.IdCliente.ToString();
                    txtNome.Text = cliente.Nome;

                    lvUnidades.DataSource = clientesService.ObterUnidadesTopoPorCliente(cliente);
                    lvUnidades.DataBind();

                    lvRefeitorios.DataSource = clientesService.ObterUnidadesServicoPorCliente(cliente);
                    lvRefeitorios.DataBind();

                    IContratoService contratosService = new ContratoService();
                    lvContratos.DataSource = contratosService.ObterTodosActivosPorCliente(cliente);
                    lvContratos.DataBind();

                }
            }
        }

        private void LimpaDadosForm()
        {
            txtIdCliente.Text = String.Empty;
            txtNome.Text = String.Empty;
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect(@"~\clientes\ClientesLista.aspx");
        }

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            IClienteService clientesService = new ClienteService();
            Cliente cliente = new Cliente();
            cliente.Nome = txtNome.Text.Trim();
            if (String.IsNullOrEmpty(txtIdCliente.Text.Trim()))
            {
                cliente = clientesService.Insere(cliente);
                txtIdCliente.Text = cliente.IdCliente.ToString();
                btnCriarContrato.Enabled = true;
                btnCriarUnidade.Enabled = true;
            }
            else
            {
                cliente.IdCliente = Convert.ToInt64(txtIdCliente.Text);
                clientesService.Actualiza(cliente);
            }

            MostraInfo("Cliente gravado com sucesso");
        }

        protected void btnCriarUnidade_Click(object sender, EventArgs e)
        {
            Response.Redirect(@"~\clientes\UnidadeDetalhe.aspx?cid=" + txtIdCliente.Text);
        }

        protected void btnCriarContrato_Click(object sender, EventArgs e)
        {
            Response.Redirect(@"~\Contratos\ContratoDetalhe.aspx?cid=" + txtIdCliente.Text);
        }

        #region lvUnidades eventos

        protected void lvUnidades_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
            try
            {
                IClienteService clientesService = new ClienteService();
                clientesService.Apaga(new Unidade() { IdUnidade = Convert.ToInt64(e.Keys["IdUnidade"]) });
                DataBindlvUnidades();
                MostraInfo("Unidade eliminada com sucesso.");
            }
            catch (Exception ex)
            {
                MostraErro(ex.Message);
            }
        }

        protected void lvUnidades_ItemEditing(object sender, ListViewEditEventArgs e)
        {
        }

        protected void lvUnidades_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Edit")
                Response.Redirect(@"~\Clientes\UnidadeDetalhe.aspx?uid=" + e.CommandArgument.ToString());
        }

        #endregion

        #region lvRefeitorios eventos

        protected void lvRefeitorios_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
            IClienteService clientesService = new ClienteService();
            clientesService.Apaga(new Unidade() { IdUnidade = Convert.ToInt64(e.Keys["IdUnidade"]) });
        }

        protected void lvRefeitorios_ItemEditing(object sender, ListViewEditEventArgs e)
        {
        }

        protected void lvRefeitorios_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Edit")
                Response.Redirect(@"~\Clientes\UnidadeDetalhe.aspx?uid=" + e.CommandArgument.ToString());
        }

        #endregion

        #region lvContratos eventos

        protected void lvContratos_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
            IContratoService contratoService = new ContratoService();
            contratoService.Apaga(new Contrato() { NumeroContrato = Convert.ToInt64(e.Keys["NumeroContrato"]) });
        }

        protected void lvContratos_ItemEditing(object sender, ListViewEditEventArgs e)
        {
        }

        protected void lvContratos_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Edit")
                Response.Redirect(@"~\Contratos\ContratoDetalhe.aspx?nc=" + e.CommandArgument.ToString());
        }

        #endregion


        private void DataBindlvUnidades()
        {
            IClienteService clienteService = new ClienteService();
            Cliente cliente = clienteService.ObterPorIdCliente(Convert.ToInt64(txtIdCliente.Text));
            lvUnidades.DataSource = clienteService.ObterUnidadesTopoPorCliente(cliente);
            lvUnidades.DataBind();
            
        }

    }
}